/**
 * 判断是否为空
 * @param {*} val 
 * @returns 
 */
const isEmpty = (val) => {
    // null or undefined
    if (val == null) return true;

    if (typeof val === 'boolean') return false;

    if (typeof val === 'number') return !val;

    if (val instanceof Error) return val.message === '';

    switch (Object.prototype.toString.call(val)) {
        // String or Array
        case '[object String]':
        case '[object Array]':
            return !val.length;

        // Map or Set or File
        case '[object File]':
        case '[object Map]':
        case '[object Set]': {
            return !val.size;
        }
        // Plain Object
        case '[object Object]': {
            return !Object.keys(val).length;
        }
    }

    return false;
}

/**
  * 格式化时间
  * fmt: yyyy-MM-dd hh:mm:ss
  */
const formatTime = (datetime, fmt) => {
    let date = new Date();
    if (!isEmpty(datetime)) {
        if (Object.prototype.toString.call(datetime) === "[object String]" || Object.prototype.toString.call(datetime) === "[object Number]") {
            datetime = datetime.replace(/\-/g, "/");
            date = new Date(datetime);
        }
    }

    let o = {
        "M+": date.getMonth() + 1, //月份   
        "d+": date.getDate(), //日   
        "h+": date.getHours(), //小时   
        "m+": date.getMinutes(), //分   
        "s+": date.getSeconds(), //秒   
        "q+": Math.floor((date.getMonth() + 3) / 3), //季度   
        "S": date.getMilliseconds() //毫秒   
    };

    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

/**
 * 通过页面栈调用页面方法
 * @param {*} preIdx 页面位置 1～n 0:当前页面 1:上一页 ，依次递增
 * @param {*} funcName 
 * @param {*} preData 
 * @param {*} callback function
 */
const callCurrentPage = (preIdx, funcName, ...opt) => {
    preIdx = (preIdx || 0) * 1;
    preIdx++;
    //获取页面栈
    var pages = getCurrentPages();
    if (pages.length > 1 && pages.length >= preIdx) { //说明有上一页存在
        //上一个页面实例对象
        var prePage = pages[pages.length - preIdx];
        //关键在这里，调用上一个页面的函数
        if (prePage[funcName]) {
            prePage[funcName](...opt);
        } else {
            throw new Error(`调用页面方法${funcName}未定义`);
        }
    } else {
        throw new Error("页面栈出现空指针");
    }
}

/**
 * 获取页面对象
 * @param {*} preIdx 页面位置 0～n 0:当前页面 1:上一页 ，依次递增，默认获取当前页面对象
 * @returns 
 */
const getCurrentPage = (preIdx = 0) => {
    preIdx++;
    var pages = getCurrentPages();    //获取加载的页面
    var currentPage = pages[pages.length - preIdx];    //获取当前页面的对象
    return currentPage;
}

export default {
    isEmpty,
    formatTime,
    getCurrentPage,
    callCurrentPage,
}